#include <stdio.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include <strings.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <linux/input.h>
 
//ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);
 
int main()
{
	
	//1.创建socket
	int skfd=socket(AF_INET ,SOCK_DGRAM, 0);
	if(skfd == -1)
	{
		perror("socket fail");
	}
	else
	{
		printf("socket ok\n");
		printf("skfd=%d\n",skfd);
	}
	
	int s_ret=0; //返回值
	char buf[512]={0}; //存储读取内容
	struct sockaddr_in  seraddr={0}; //来自客户端地址
	
	seraddr.sin_family=AF_INET; //IPV4
	seraddr.sin_port= htons(12345); 
	//端口号 http-80 8080  Telnet--23 范围:0~65535  个人编程的时候建议5位数的端口号
	//htons()  把本地转换为网络序  认识大端和小端存储
	seraddr.sin_addr.s_addr=inet_addr( "192.168.64.5"); //服务器的地址
	//htonl() 课后 认识一下  转换为网络序  INADDR_ANY--0.0.0.0--表示自动获取本机IP
	
	
	
	socklen_t addrlen=sizeof(seraddr); //地址长度
	
	while(1)
	{
		printf("请输入发送的消息\n");
		scanf("%s",buf);
		s_ret=sendto(skfd,buf, strlen(buf),0,(struct sockaddr*)&seraddr, addrlen);
		//面试题 strlen 和 sizeof 对比
		if(s_ret==-1)
		{
			perror("sendto fail");
		}
		if(strcmp(buf,"exit")== 0)
		{
			break;
		}
		memset(buf,0,sizeof(buf)); //用完之后清空
	}
	
	//关闭通信
	close(skfd);
	
}